home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 318 / utilsrc / make-3 < prev    next >
Encoding:
Text File  |  1988-10-20  |  48.2 KB  |  1,188 lines

  1.  
  2. File: make,  Node: Function Syntax,  Next: Text Functions,  Prev: Functions,  Up: Functions
  3.  
  4. Function Call Syntax
  5. ====================
  6.  
  7. A function call resembles a variable reference.  It looks like this:
  8.  
  9.      $(FUNCTION ARGUMENTS)
  10.  
  11. or like this:
  12.  
  13.      ${FUNCTION ARGUMENTS}
  14.  
  15. Here FUNCTION is a function name; one of a short list of names that are
  16. part of `make'.  There is no provision for defining new functions.
  17.  
  18. The ARGUMENTS are the arguments of the function.  They are separated from
  19. the function name by one or more spaces and/or tabs, and if there is more
  20. than one argument they are separated by commas.  Such whitespace and commas
  21. are not part of any argument's value.  Parentheses or braces, whichever you
  22. use to surround the function call, can appear in an argument only in
  23. matching pairs; the ones that were not used to surround the function call
  24. can appear freely.  If the arguments contain other function calls or
  25. variable references, it is wisest to surround them with the same delimiters
  26. used for the containing function call.
  27.  
  28. The text written for each argument is processed by substitution of
  29. variables and function calls in order to produce the argument value, which
  30. is the text on which the function acts.
  31.  
  32. Commas and unmatched parentheses or braces cannot appear in the text of an
  33. argument as written; leading spaces cannot appear in the text of the first
  34. argument as written.  These characters can be put into the argument value
  35. by variable substitution.  First define variables `comma' and `space' whose
  36. values are isolated comma and space characters, then substitute those
  37. variables where such characters are wanted, like this:
  38.  
  39.      comma:= ,
  40.      space:= $(empty) $(empty)
  41.      foo:= a b c
  42.      bar:= $(subst $(space),$(comma),$(foo))
  43.      # bar is now `a,b,c'.
  44.  
  45.  Here the `subst' function replaces each space with a comma, through the
  46. value of `foo', and substitutes the result.
  47.  
  48. File: make,  Node: Text Functions,  Next: Foreach Function,  Prev: Function Syntax,  Up: Functions
  49.  
  50. Functions for String Substitution and Analysis
  51. ==============================================
  52.  
  53. Here are some functions that operate on substrings of a string:
  54.  
  55. `$(subst FROM,TO,TEXT)'
  56.      Performs a textual replacement on the text TEXT: each occurrence of
  57.      FROM is replaced by TO.  The result is substituted for the function
  58.      call.  For example,
  59.  
  60.           $(subst ee,EE,feet on the street)
  61.  
  62.      substitutes the string `fEEt on the strEEt'.
  63.  
  64. `$(patsubst PATTERN,REPLACEMENT,TEXT)'
  65.      Finds whitespace-separated words in TEXT that match PATTERN and
  66.      replaces them with REPLACEMENT.  Here PATTERN may contain a `%' which
  67.      acts as a wildcard, matching any number of any characters within a
  68.      word.  If REPLACEMENT also contains a `%', the `%' is replaced by the
  69.      text that matched the `%' in PATTERN.
  70.  
  71.      Whitespace between words is folded into single space characters;
  72.      leading and trailing whitespace is discarded.
  73.  
  74. `$(strip STRING)'
  75.      Removes leading and trailing whitespace from STRING and replaces each
  76.      internal sequence of one or more whitespace characters with a single
  77.      space.
  78.  
  79. `$(findstring FIND,IN)'
  80.      Searches IN for an occurrence of FIND.  If it occurs, the value is
  81.      FIND; otherwise, the value is empty.  You can use this function in a
  82.      conditional to test for the presence of a specific substring in a
  83.      given string.  *note Testing Flags::, for a practical application of
  84.      `findstring'.
  85.  
  86. `$(filter PATTERN,TEXT)'
  87.      Removes all whitespace-separated words in TEXT that do *not* match
  88.      PATTERN, returning only matching words.  The pattern is one using `%'
  89.      as used in the `patsubst' function.  This can be used to separate out
  90.      different types of strings (such as filenames) in a variable.  For
  91.      example:
  92.  
  93.           sources := foo.c bar.c ugh.h
  94.           foo: $(sources)
  95.                   cc $(filter %.c,$(sources)) -o foo
  96.  
  97.      says that `foo' depends of `foo.c', `bar.c' and `ugh.h' but only
  98.      `foo.c' and `bar.c' should be specified in the command to the compiler.
  99.  
  100. `$(filter-out PATTERN,TEXT)'
  101.      Removes all whitespace-separated words in TEXT that *do* match
  102.      PATTERN, returning only matching words.  This is the exact opposite of
  103.      the `filter' function.
  104.  
  105. `$(sort LIST)'
  106.      Sorts the words of LIST in lexical order, removing duplicate words. 
  107.      The output is a list of words separated by single spaces.
  108.  
  109. Here is a realistic example of the use of `subst'.  Suppose that a makefile
  110. uses the `VPATH' variable to specify a list of directories that `make'
  111. should search for dependency files.  This example shows how to tell the C
  112. compiler to search for header files in the same list of directories.
  113.  
  114. The value of `VPATH' is a list of directories separated by colons, such as
  115. `src:../headers'.  First, the `subst' function is used to change the colons
  116. to spaces:
  117.  
  118.      $(subst :, ,$(VPATH))
  119.  
  120. This produces `src ../headers'.  Then another function, `addprefix', can
  121. turn each directory name into an `-I' flag.  These can be added to the
  122. value of the variable `CFLAGS', which is passed automatically to the C
  123. compiler, like this:
  124.  
  125.      override CFLAGS:= $(CFLAGS) $(addprefix -I,$(subst :, ,$(VPATH)))
  126.  
  127. The effect is to append the text `-Isrc -I../headers' to the previously
  128. given value of `CFLAGS'.  The `override' directive is used so that the new
  129. value is assigned even if the previous value of `CFLAGS' was specified with
  130. a command argument (*Note Override Directive::.).
  131.  
  132. The function `strip' can be very useful when used in conjunction with
  133. conditionals.  When comparing something with the null string `""' using
  134. `ifeq' or `ifneq', you usually want a string of just whitespace to match
  135. the null string.  Thus,
  136.  
  137.      .PHONY: all
  138.      ifneq    "$(needs_made)" ""
  139.      all: $(needs_made)
  140.      else
  141.      all:;@echo 'Nothing to make!'
  142.      endif
  143.  
  144. might fail to have the desired results.  Replacing the variable reference
  145. `"$(needs_made)"' with the function call `"$(strip $(needs_made))"' in the
  146. `ifneq' directive would make it more robust.
  147.  
  148. File: make,  Node: Foreach Function,  Next: Filename Functions,  Prev: Text Functions,  Up: Functions
  149.  
  150. The `foreach' Function
  151. ======================
  152.  
  153. The `foreach' function is very different from other functions.  It causes
  154. one piece of text to be used repeatedly, each time with a different
  155. substitution performed on it.  It resembles the `for' command in the shell
  156. `sh' and the `foreach' command in the C-shell `csh'.
  157.  
  158. The syntax of the `foreach' function is:
  159.  
  160.      $(foreach VAR,LIST,TEXT)
  161.  
  162. The first two arguments, VAR and LIST, are expanded before anything else is
  163. done; note that the last argument, TEXT, is *not* expanded at the same
  164. time.  Then for each word of the expanded value of LIST, the variable named
  165. by the expanded value of VAR is set to that word, and TEXT is expanded. 
  166. Presumably TEXT contains references to that variable, so the expansions
  167. will be different each time.
  168.  
  169. The result is that TEXT is expanded as many times as there are
  170. whitespace-separated words in LIST.  The multiple expansions of TEXT are
  171. concatenated, with spaces between them, to make the result of `foreach'.
  172.  
  173. This simple example sets the variable `files' to the list of all files in
  174. the directories in the list `dirs':
  175.  
  176.      find_files = $(wildcard $(dir)/*)
  177.      dirs := a b c d
  178.      files := $(foreach dir,$(dirs),$(find_files))
  179.  
  180. For readability, it is a good idea to put the TEXT part of a `foreach'
  181. function invokation into a variable.  Here we use the variable `find_file'
  182. this way.  We make this a recursively-expanding variable by using `=' to
  183. define it.  This is necessary so that when its value is substituted by
  184. `foreach' the value is rescanned for variable references and function
  185. calls.  This is what causes the `wildcard' function actually to be called.
  186.  
  187. This example has the same result (except for setting `find_files', `dirs'
  188. and `dir') as the following example:
  189.  
  190.      files := $(wildcard a/* b/* c/* d/*)
  191.  
  192. The value of the variable VAR after the `foreach' function call is the same
  193. as the value beforehand.  Other values taken from LIST are in effect only
  194. temporarily, during the execution of `foreach'.  The variable VAR is a
  195. simply-expanded variable during the execution of `foreach' but is returned
  196. to the same flavor it was before the `foreach' when it is done.  *note
  197. Flavors::.
  198.  
  199. If VAR was previously undefined, then it is defined as a recursively
  200. expanded variable (`=', not `:=') during the `foreach' and remains so (with
  201. a null value) afterward.
  202.  
  203. Because it is expanded before `foreach' runs, the VAR argument to `foreach'
  204. need not be a literal variable name.  It can instead be a variable
  205. expression resulting in the name.  Thus,
  206.  
  207.      dir := a
  208.      var = $(whatsthevar)
  209.      foo := dar
  210.      whatsthevar := $(subst a,i,$(foo))
  211.      files := $(foreach $(var),$(dirs),$(find_files))
  212.  
  213. is ultimately equivalent to the first example.  You must take care when
  214. using complex variable expressions that result in variable names because
  215. many strange things are legal variable names, and these might not be what
  216. you intended.  For example,
  217.  
  218.      files := $(foreach Es escrito en espanol!,b c ch,$(find_files))
  219.  
  220. might be useful if `find_files' references the variable `Es escrito en
  221. espanol!' (es un nombre bastante largo, no?), but it is more likely to be a
  222. mistake.
  223.  
  224. File: make,  Node: Filename Functions,  Prev: Foreach Function,  Up: Functions
  225.  
  226. Functions for File Names
  227. ========================
  228.  
  229. Several of the built-in expansion functions relate specifically to taking
  230. apart file names or lists of file names.
  231.  
  232. Each of these functions performs a specific transformation on a file name. 
  233. The argument of the function is regarded as a series of file names,
  234. separated by whitespace.  (Leading and trailing whitespace is ignored.)
  235. Each file name in the series is transformed in the same way and the results
  236. are concatenated with single spaces between them.
  237.  
  238. `$(dir NAMES)'
  239.      Extracts the directory-part of each file name in NAMES.  The
  240.      directory-part of the file name is everything up through (and
  241.      including) the last slash in it.  If the file name contains no slash,
  242.      the directory part is the string `./'.  For example,
  243.  
  244.           $(dir src/foo.c hacks)
  245.  
  246.      produces the result `src/ ./'.
  247.  
  248. `$(notdir NAMES)'
  249.      Extracts all but the directory-part of each file name in NAMES.  If
  250.      the file name contains no slash, it is left unchanged.  Otherwise,
  251.      everything through the last slash is removed from it.  A file name
  252.      that ends with a slash becomes an empty string.  This is unfortunate,
  253.      because it means that the result does not always have the same number
  254.      of whitespace-separated file names as the argument had; but we do not
  255.      see any other valid alternative.
  256.  
  257.      For example,
  258.  
  259.           $(notdir src/foo.c hacks)
  260.  
  261.      produces the result `foo.c hacks'.
  262.  
  263. `$(suffix NAMES)'
  264.      Extracts the suffix of each file name in NAMES.  If the file name
  265.      contains a period, the suffix is everything starting with the last
  266.      period.  Otherwise, the suffix is the empty string.  This frequently
  267.      means that the result will be empty when NAMES is not, and if NAMES
  268.      contains multiple file names, the result may contain fewer file names.
  269.  
  270.      For example,
  271.  
  272.           $(suffix src/foo.c hacks)
  273.  
  274.      produces the result `.c'.
  275.  
  276. `$(basename NAMES)'
  277.      Extracts all but the suffix of each file name in NAMES.  If the file
  278.      name contains a period, the basename is everything starting up to (and
  279.      not including) the last period.  Otherwise, the basename is the entire
  280.      file name.  For example,
  281.  
  282.           $(basename src/foo.c hacks)
  283.  
  284.      produces the result `src/foo hacks'.
  285.  
  286. `$(addsuffix SUFFIX,NAMES)'
  287.      The argument NAMES is regarded as a series of names, separated by
  288.      whitespace; SUFFIX is used as a unit.  The value of SUFFIX is appended
  289.      to the end of each individual name and the resulting larger names are
  290.      concatenated with single spaces between them.  For example,
  291.  
  292.           $(addsuffix .c,foo bar)
  293.  
  294.      produces the result `foo.c bar.c'.
  295.  
  296. `$(addprefix PREFIX,NAMES)'
  297.      The argument NAMES is regarded as a series of names, separated by
  298.      whitespace; PREFIX is used as a unit.  The value of PREFIX is appended
  299.      to the front of each individual name and the resulting larger names
  300.      are concatenated with single spaces between them.  For example,
  301.  
  302.           $(addprefix src/,foo bar)
  303.  
  304.      produces the result `src/foo src/bar'.
  305.  
  306. `$(join LIST1,LIST2)'
  307.      Concatenates the two arguments word by word: the two first words (one
  308.      from each argument) concatenated form the first word of the result,
  309.      the two second words form the second word of the result, and so on. 
  310.      So the Nth word of the result comes from the Nth word of each
  311.      argument.  If one argument has more words that the other, the extra
  312.      words are copied unchanged into the result.
  313.  
  314.      For example, `$(join a b,.c .o)' produces `a.c b.o'.
  315.  
  316.      Whitespace between the words in the lists is not preserved; it is
  317.      replaced with a single space.
  318.  
  319.      This function can reverse the effect of the `dir' and `notdir'
  320.      functions, after other processing has been done on the separated lists
  321.      of directories and files.
  322.  
  323. `$(firstword NAMES)'
  324.      The argument NAMES is regarded as a series of names, separated by
  325.      whitespace.  The value is the first name in the series.  The rest of
  326.      the names are ignored.  For example,
  327.  
  328.           $(firstword foo bar)
  329.  
  330.      produces the result `foo'.
  331.  
  332. `$(wildcard PATTERN)'
  333.      The argument PATTERN is a file name pattern, typically containing
  334.      wildcard characters.  The result of `wildcard' is a space-separated
  335.      list of the names of existing files that match the pattern.
  336.  
  337.      Wildcards are expanded automatically in rules (*Note Wildcards::.). 
  338.      But they are not normally expanded when a variable is set, or inside
  339.      the arguments of other functions.  Those occasions are when the
  340.      `wildcard' function is useful.
  341.  
  342. File: make,  Node: Running,  Next: Implicit,  Prev: Functions,  Up: Top
  343.  
  344. How to Run `make'
  345. *****************
  346.  
  347. A makefile that says how to recompile a program can be used in more than
  348. one way.  The simplest use is to recompile every file that is out of date. 
  349. This is what `make' will do if run with no arguments.
  350.  
  351. But you might want to update only some of the files; you might want to use
  352. a different compiler or different compiler options; you might want just to
  353. find out which files are out of date without changing them.
  354.  
  355. By specifying arguments when you run `make', you can do any of these things
  356. or many others.
  357.  
  358. * Menu:
  359.  
  360. * Makefile Arguments::    Arguments to specify which makefile to use.
  361.  
  362. * Goals::                 Goal arguments specify which parts of the makefile
  363.                            should be used.
  364.  
  365. * Avoid Compilation::     How to avoid recompiling certain files.
  366.  
  367. * Instead of Execution::  Mode flags specify what kind of thing to do
  368.                            with the commands in the makefile
  369.                            other than simply execute them.
  370.  
  371. * Overriding::            Overriding a variable can specify an alternate
  372.                            compiler, or alternate flags for the compiler,
  373.                            or whatever else you program into the makefile.
  374.  
  375. * Testing::               How to proceed past some errors, to test compilation.
  376.  
  377. * Options::               Summary of all options `make' accepts.
  378.  
  379.  
  380. File: make,  Node: Makefile Arguments,  Next: Goals,  Prev: Running,  Up: Running
  381.  
  382. Arguments to Specify the Makefile
  383. =================================
  384.  
  385. The way to specify the name of the makefile is with the `-f' option.  For
  386. example, `-f altmake' says to use the file `altmake' as the makefile.
  387.  
  388. If you use the `-f' flag several times (each time with a following
  389. argument), all the specified files are used jointly as makefiles.
  390.  
  391. If you do not use the `-f' flag, the default is to use `./makefile', or, if
  392. that does not exist, `./Makefile'.  *note Makefiles::.
  393.  
  394. File: make,  Node: Goals,  Next: Avoid Compilation,  Prev: Makefile Arguments,  Up: Running
  395.  
  396. Goals
  397. =====
  398.  
  399. The "goals" are the targets that `make' should strive ultimately to update.
  400.  Other targets are updated as well if they appear as dependencies of goals,
  401. or dependencies of dependencies of goals, etc.
  402.  
  403. By default, the goal is the first target in the makefile (not counting
  404. targets that start with a period or that appear in included makefiles). 
  405. Therefore, makefiles are usually written so that the first target is for
  406. compiling the entire program or programs they describe.
  407.  
  408. You can specify a different goal or goal with arguments to `make'.  Use the
  409. name of the goal as an argument.  If you specify several goals, `make'
  410. processes each of them in turn, in the order you name them.
  411.  
  412. Any target in the makefile may be specified as a goal (unless it starts
  413. with `-' or contains an `=').  Even targets not in the makefile may be
  414. specified, if `make' can find implicit rules that say how to make them.
  415.  
  416. One use of specifying a goal is if you want to compile only a part of the
  417. program, or only one of several programs.  Specify as a goal each file that
  418. you wish to remake.  For example, consider a directory containing a several
  419. programs, with a makefile that starts like this:
  420.  
  421.      .PHONY: all
  422.      all: size nm ld ar as
  423.  
  424. If you are working on the program `size', you might want to say `make size'
  425. so that only the files of that program are recompiled.
  426.  
  427. Another use of specifying a goal is to make files that aren't normally
  428. made.  For example, there may be a file of debugging output, or a version
  429. of the program that is compiled specially for testing, which has a rule in
  430. the makefile but isn't a dependency of the default goal.
  431.  
  432. Another use of specifying a goal is to run the commands associated with a
  433. phony target (*Note Phony Targets::.) or empty target (*Note Empty
  434. Targets::.).  Many makefiles contain a phony target named `clean' which
  435. deletes everything except source files.  Naturally, this is done only if
  436. you request it explicitly with `make clean'.  Here is a list of typical
  437. phony and empty target names:
  438.  
  439. `all'
  440.      Make all the top-level targets the makefile knows about.
  441.  
  442. `clean'
  443.      Delete all files that the makefile could remake.
  444.  
  445. `clobber'
  446.      Delete absolutely everything the makefile could remake (whereas `make
  447.      clean' often leaves intact some files that might take a long time to
  448.      remake).
  449.  
  450. `install'
  451.      Copy the executable file into a directory that users typically search
  452.      for commands; copy any auxiliary files that the executable uses into
  453.      the directories where it will look for them.
  454.  
  455. `print'
  456.      Print listings of the source files that have changed.
  457.  
  458. `tar'
  459.      Create a tar file of the source files.
  460.  
  461. `shar'
  462.      Create a shell archive (shar file) of the source files.
  463.  
  464. File: make,  Node: Avoid Compilation,  Next: Instead of Execution,  Prev: Goals,  Up: Running
  465.  
  466. Avoiding Recompilation of Some Files
  467. ====================================
  468.  
  469. Sometimes you may have changed a source file but you don't want to
  470. recompile all the files that depend on it.  For example, suppose you add a
  471. macro or a declaration to a header file that many other files depend on. 
  472. Being conservative, `make' assumes that any change in the header file
  473. requires recompilation of all dependent files, but you know that they don't
  474. need to be recompiled and you would rather not waste the time waiting.
  475.  
  476. If you anticipate the problem before making the change, you can use the
  477. `-t' flag.  This flag tells `make' not to run the commands in the rules,
  478. but rather to mark the target up to date by changing its last-modification
  479. date.  You would follow this procedure:
  480.  
  481.   1. Use the command `make' to recompile the source files that really need
  482.      recompilation.
  483.  
  484.   2. Make the changes in the header files.
  485.  
  486.   3. Use the command `make -t' to mark all the object files as up to date. 
  487.      The next time you run `make', the changes in the header files will not
  488.      cause any recompilation.
  489.  
  490. If you have already changed the header file at a time when some files do
  491. need recompilation, it is too late to do this.  Instead, you can use the
  492. `-o FILE' flag, which marks a specified file as ``old'' (*Note Options::.).
  493.  This means that the file itself won't be remade, and nothing else will be
  494. remade on its account.  Follow this procedure:
  495.  
  496.   1. Recompile the source files that need compilation for reasons independent
  497.      of the particular header file, with `make -o HEADERFILE'.  If several
  498.      header files are involved, use a separate `-o' option for each header
  499.      file.
  500.  
  501.   2. Touch all the object files with `make -t'.
  502.  
  503. File: make,  Node: Instead of Execution,  Next: Overriding,  Prev: Avoid Compilation,  Up: Running
  504.  
  505. Instead of Executing the Commands
  506. =================================
  507.  
  508. The makefile tells `make' how to tell whether a target is up to date, and
  509. how to update each target.  But updating the targets is not always what you
  510. want.  Certain options specify other activities for `make'.
  511.  
  512. `-t'
  513.      ``Touch''.  The activity is to mark the targets as up to date without
  514.      actually changing them.  In other words, `make' pretends to compile
  515.      the targets but does not really change their contents.
  516.  
  517. `-n'
  518.      ``No-op''.  The activity is to print what commands would be used to
  519.      make the targets up to date, but not actually execute them.
  520.  
  521. `-q'
  522.      ``Question''.  The activity is to find out silently whether the
  523.      targets are up to date already; but execute no commands in either
  524.      case.  In other words, neither compilation nor output will occur.
  525.  
  526. With the `-n' flag, `make' prints without execution the commands that it
  527. would normally execute.
  528.  
  529. With the `-t' flag, `make' ignores the commands in the rules and uses (in
  530. effect) the command `touch' for each target that needs to be remade.  The
  531. `touch' command is also printed, unless `-s' or `.SILENT' is used.  For
  532. speed, `make' does not actually invoke the program `touch'.  It does the
  533. work directly.
  534.  
  535. With the `-q' flag, `make' prints nothing and executes no commands, but the
  536. exit status code it returns is zero if and only if the targets to be
  537. considered are already up to date.
  538.  
  539. It is an error to use more than one of these three flags in the same
  540. invocation of `make'.
  541.  
  542. If you are not at all interested in what `make' *would* do, but rather in
  543. some other information about `make', there are two options: the command
  544. line `make -p -f /dev/null' will print the information in `make''s database
  545. of variables, rules, directories and files and `make -v -f /dev/null' will
  546. print information about what version of GNU `make' you are using.  *note
  547. Options::.
  548.  
  549. File: make,  Node: Overriding,  Next: Testing,  Prev: Instead of Execution,  Up: Running
  550.  
  551. Overriding Variables
  552. ====================
  553.  
  554. You can override the value of a variable using an argument to `make' that
  555. contains a `='.  The argument `V=X' (or `V:=X'; *Note Flavors::.) sets the
  556. value of the variable V to X.
  557.  
  558. Values specified this way override all values specified in the makefile
  559. itself; once you have set a variable with a command argument, any ordinary
  560. attempt in the makefile to change that variable is simply ignored.
  561.  
  562. One way to use this facility is to pass extra flags to compilers.  For
  563. example, in a properly written makefile, the variable `CFLAGS' is included
  564. in each command that runs the C compiler, so a file `foo.c' would be
  565. compiled like this:
  566.  
  567.      cc -c $(CFLAGS) foo.c
  568.  
  569. Thus, whatever value you set for `CFLAGS' affects each compilation that
  570. occurs.  The makefile probably specifies the usual value for `CFLAGS', like
  571. this:
  572.  
  573.      CFLAGS=-g
  574.  
  575. Each time you run `make', you can override this value and specify a
  576. different value.  For example, if you say `make CFLAGS='-g -O'', each C
  577. compilation will be done with `cc -c -g -O'.  (This illustrates how you can
  578. enclose spaces and other special characters in the value of a variable when
  579. you override it.)
  580.  
  581. The variable `CFLAGS' is only one of many standard variables that exist
  582. just so that you can change them this way.  *note Implicit Variables::, for
  583. a complete list.
  584.  
  585. You can also program the makefile to look at additional variables of your
  586. own, giving the user ability to control other aspects of how the makefile
  587. works by changing the variables.
  588.  
  589. There is one way that the makefile can change a variable that you have
  590. overridden.  This is to use the `override' directive, which is a line that
  591. looks like this: `override VARIABLE = VALUE'.  *note Override Directive::.
  592.  
  593. File: make,  Node: Testing,  Next: Options,  Prev: Overriding,  Up: Running
  594.  
  595. Testing the Compilation of a Program
  596. ====================================
  597.  
  598. Normally, when an error happens in executing a shell command, `make' gives
  599. up immediately, returning a nonzero status.  No further commands are
  600. executed for any target.  The error implies that the goal cannot be
  601. correctly remade, and `make' reports this as soon as it knows.
  602.  
  603. When you are compiling a program that you have just changed, this is not
  604. what you want.  Instead, you would rather that `make' try compiling every
  605. file that can be tried, to show you all the compilation errors.
  606.  
  607. On these occasions, you should use the `-k' flag.  This tells `make' to
  608. continue to consider the other dependencies of the pending targets,
  609. remaking them if necessary, before it gives up and returns nonzero status. 
  610. For example, after an error in compiling one object file, `make -k' will
  611. continue compiling other object files even though it already knows that
  612. linking them will be impossible.  In addition to contuing after failing
  613. shell commands, `make -k' will continue as much as possible after
  614. discovering that it doesn't know how to make a target or dependency file. 
  615. This will always cause an error message, but without `-k', it is a fatal
  616. error.  *note Options::.
  617.  
  618. The usual behavior of `make' assumes that your purpose is to get the goals
  619. up to date; once `make' learns that this is impossible, it might as well
  620. report the failure immediately.  The `-k' flag says that the real purpose
  621. is to test as much as possible of the changes made in the program, perhaps
  622. to find several independent problems so that you can correct them all
  623. before the next attempt to compile.  This is why Emacs's `compile' command
  624. passes the `-k' flag by default.
  625.  
  626. File: make,  Node: Options,  Prev: Testing,  Up: Running
  627.  
  628. Summary of Options
  629. ==================
  630.  
  631. Here is a table of all the options `make' understands:
  632.  
  633. `-b'
  634. `-m'
  635.      These options are ignored for compatibility with other versions of
  636.      `make'.
  637.  
  638. `-c DIR'
  639.      Change to directory DIR before executing the rules.  If multiple `-c'
  640.      options are specified, each is interpreted relative to the previous
  641.      one: `-c / -c etc' is equivalent to `-c /etc'.  This is typically used
  642.      with recursive invocations of `make' (*Note Recursion::.).
  643.  
  644. `-d'
  645.      Print debugging information in addition to normal processing.  The
  646.      debugging information says which files are being considered for
  647.      remaking, which file-times are being compared and with what results,
  648.      which files actually need to be remade, which implicit rules are
  649.      considered and which are applied---everything interesting about how
  650.      `make' decides what to do.
  651.  
  652. `-f FILE'
  653.      Use file FILE as a makefile.  *note Makefiles::.
  654.  
  655. `-i'
  656.      Ignore all errors in commands executed to remake files.  *note Errors::.
  657.  
  658. `-I DIR'
  659.      Specifies a directory DIR to search for included makefiles.  *note
  660.      Include::.  If several `-I' options are used to specify several
  661.      directories, the directories are searched in the order specified.
  662.  
  663. `-k'
  664.      Continue as much as possible after an error.  While the target that
  665.      failed, and those that depend on it, cannot be remade, the other
  666.      dependencies of these targets can be processed all the same.  *note
  667.      Testing::.
  668.  
  669. `-n'
  670.      Print the commands that would be executed, but do not execute them. 
  671.      *note Instead of Execution::.
  672.  
  673. `-o FILE'
  674.      Do not remake the file FILE even if it is older than its dependencies,
  675.      and do not remake anything on account of changes in FILE.  Essentially
  676.      the file is treated as very old and its rules are ignored.  *note
  677.      Avoid Compilation::.
  678.  
  679. `-p'
  680.      Print the data base (rules and variable values) that results from
  681.      reading the makefiles; then execute as usual or as otherwise
  682.      specified.  This also prints the version information given by the `-v'
  683.      switch (see below).  To print the data base without trying to remake
  684.      any files, use `make -p -f /dev/null'.
  685.  
  686. `-q'
  687.      ``Question mode''.  Do not run any commands, or print anything; just
  688.      return an exit status that is zero if the specified targets are
  689.      already up to date, nonzero otherwise.  *note Instead of Execution::.
  690.  
  691. `-r'
  692.      Eliminate use of the built-in implicit rules (*Note Implicit::.). 
  693.      Also clear out the default list of suffixes for suffix rules (*Note
  694.      Suffix Rules::.).
  695.  
  696. `-s'
  697.      Silent operation; do not print the commands as they are executed. 
  698.      *note Echoing::.
  699.  
  700. `-S'
  701.      Cancel the effect of the `-k' option.  This is never necessary except
  702.      in a recursive `make' where `-k' might be inherited from the top-level
  703.      `make' via `MAKEFLAGS' (*Note Recursion::.) or if you set `-k' in
  704.      `MAKEFLAGS' in your environment.
  705.  
  706. `-t'
  707.      Touch files (mark them up to date without really changing them)
  708.      instead of running their commands.  This is used to pretend (to fool
  709.      future invocations of `make') that the commands were done.  *note
  710.      Instead of Execution::.
  711.  
  712. `-v'
  713.      Print the version of the `make' program plus a copyright, list of
  714.      authors and notice of (non)warranty (short).  After this information
  715.      is printed, processing continues normally.  To get the version
  716.      information without doing anything else, use `make -v -f /dev/null'.
  717.  
  718. `-w'
  719.      Print a message containing the working directory both before and after
  720.      executing the makefile; this is useful for tracking down errors from
  721.      builds of large directory trees.  *note Recursion::.
  722.  
  723. File: make,  Node: Implicit,  Next: Archives,  Prev: Running,  Up: Top
  724.  
  725. Using Implicit Rules
  726. ********************
  727.  
  728. Certain standard ways of remaking target files are used very often.  For
  729. example, one customary way to make an object file is from a C source file
  730. using the C compiler, `cc'.
  731.  
  732. "Implicit rules" tell `make' how to use customary techniques so that you
  733. don't have to specify them in detail when you want to use them.  For
  734. example, there is an implicit rule for C compilation.
  735.  
  736. Implicit rules work based on file names.  For example, C compilation
  737. typically takes a `.c' file and makes a `.o' file.  So `make' applies the
  738. implicit rule when it sees this combination of file-name endings.
  739.  
  740. A chain of implicit rules can apply in sequence; for example, `make' will
  741. remake a `.o' file from a `.y' file by way of a `.c' file.
  742.  
  743. The built-in implicit rules use several variables in their commands so
  744. that, by changing the values of the variables, you can change the way the
  745. implicit rule works.  For example, the variable `CFLAGS' controls the flags
  746. given to the C compiler by the implicit rule for C compilation.
  747.  
  748. You can define your own implicit rules by writing "pattern rules".
  749.  
  750. * Menu:
  751.  
  752. * Using Implicit::       How to use an existing implicit rule
  753.                           to get the commands for updating a file.
  754.  
  755. * Catalogue of Rules::   Catalogue of built-in implicit rules.
  756.  
  757. * Implicit Variables::   By changing certain variables, you can
  758.                           change what the predefined implicit rules do.
  759.  
  760. * Chained Rules::        Using a chain of implicit rules.
  761.  
  762. * Pattern Rules::        Defining new implicit rules.
  763.  
  764. * Search Algorithm::     Precise algorithm for applying implicit rules.
  765.  
  766.  
  767. File: make,  Node: Using Implicit,  Next: Catalogue of Rules,  Prev: Implicit,  Up: Implicit
  768.  
  769. Using Implicit Rules
  770. ====================
  771.  
  772. To allow `make' to find a customary method for updating a target file, all
  773. you have to do is refrain from specifying commands yourself.  Either write
  774. a rule with no command lines, or don't write a rule at all.  Then `make'
  775. will figure out which implicit rule to use based on which kind of source
  776. file exists.
  777.  
  778. For example, suppose the makefile looks like this:
  779.  
  780.      foo : foo.o bar.o
  781.              cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
  782.  
  783. Because you mention `foo.o' but do not give a rule for it, `make' will
  784. automatically look for an implicit rule that tells how to update it.  This
  785. happens whether or not the file `foo.o' currently exists.
  786.  
  787. If an implicit rule is found, it supplies both commands and a dependency
  788. (the source file).  You would want to write a rule for `foo.o' with no
  789. command lines if you need to specify additional dependencies, such as
  790. header files, that the implicit rule cannot supply.
  791.  
  792. Each implicit rule has a target pattern and dependency patterns.  There may
  793. be many implicit rules with the same target pattern.  For example, numerous
  794. rules make `.o' files: one, from a `.c' file with the C compiler; another,
  795. from a `.p' file with the Pascal compiler; and so on.  The rule that
  796. actually applies is the one whose dependency exists or can be made.
  797.  
  798. So, if you have a file `foo.c', `make' will run the C compiler; otherwise,
  799. if you have a file `foo.p', `make' will run the Pascal compiler; and so on.
  800.  
  801. Of course, when you write the makefile, you know which implicit rule you
  802. want `make' to use, and you know it will choose that one because you know
  803. which other files are supposed to exist.  *note Catalogue of Rules::, for a
  804. catalogue of all the predefined implicit rules.
  805.  
  806. Above, we said an implicit rule applies if the required dependency ``exists
  807. or can be made''.  A file ``can be made'' if it is mentioned explicitly in
  808. the makefile as a target or a dependency, or if an implicit rule can be
  809. recursively found for how to make it.  When the implicit dependency is the
  810. result of another implicit rule, we say that "chaining" is occurring. 
  811. *note Chained Rules::.
  812.  
  813. In general, `make' searches for an implicit rule for each target, and for
  814. each double-colon rule, that has no commands.  A file that is mentioned
  815. only as a dependency is considered a target whose rule specifies nothing,
  816. so implicit rule search happens for it.  *note Search Algorithm::, for the
  817. details of how the search is done.
  818.  
  819. File: make,  Node: Catalogue of Rules,  Next: Implicit Variables,  Prev: Using Implicit,  Up: Implicit
  820.  
  821. Catalogue of Implicit Rules
  822. ===========================
  823.  
  824. Here is a catalogue of predefined implicit rules which are always available
  825. unless the makefile explicitly overrides or cancels them.  (*note Canceling
  826. Rules::, for information on canceling or overriding an implicit rule.  The
  827. `-r' option cancels all predefined rules.)
  828.  
  829. Compiling C programs
  830.      `N.o' will be made automatically from `N.c'  with the command `$(CC)
  831.      -c $(CFLAGS)'.
  832.  
  833. Compiling Pascal programs
  834.      `N.o' will be made automatically from `N.p' with the command `$(PC) -c
  835.      $(PFLAGS)'.
  836.  
  837. Compiling Fortran, EFL and Ratfor programs
  838.      `N.o' will be made automatically from `N.e', `N.r', `N.F' or `N.f' by
  839.      running the Fortran compiler.  The precise command used is as follows:
  840.  
  841.      `.e'
  842.           `$(FC) -c $(EFLAGS)'.
  843.      `.f'
  844.           `$(FC) -c $(FFLAGS)'.
  845.      `.F'
  846.           `$(FC) -c $(FFLAGS)'.
  847.      `.r'
  848.           `$(FC) -c $(RFLAGS)'.
  849.  
  850. Preprocessing Fortran, EFL and Ratfor programs
  851.      `N.f' will be made automatically from `N.e', `N.r' or `N.F'.  This
  852.      rule runs just the preprocessor to convert a Ratfor, EFL or
  853.      preprocessable Fortran program into a strict Fortran program.  The
  854.      precise command used is as follows:
  855.  
  856.      `.e'
  857.           `$(FC) -F $(EFLAGS)'.
  858.      `.F'
  859.           `$(FC) -F $(FFLAGS)'.
  860.      `.r'
  861.           `$(FC) -F $(RFLAGS)'.
  862.  
  863. Assembling assembler programs
  864.      `N.o' will be made automatically from `N.s' by running the assembler
  865.      `as'.  The precise command used is `$(AS) $(ASFLAGS)'.
  866.  
  867. Linking a single object file
  868.      `N' will be made automatically from `N.o' by running the linker `ld'
  869.      via the C compiler.  The precise command used is `$(CC) $(LDFLAGS) ...
  870.      $(LOADLIBES)'.
  871.  
  872.      This rule does the right thing for a simple program with only one
  873.      source file.  It will also do the right thing if there are multiple
  874.      object files (presumably coming from various other source files), the
  875.      first of which has a name matching that of the executable file.  Thus,
  876.  
  877.           x: y.o z.o
  878.  
  879.      when `x.c', `y.c' and `z.c' all exist will execute:
  880.  
  881.           cc -c x.c -o x.o
  882.           cc -c y.c -o y.o
  883.           cc -c z.c -o z.o
  884.           cc x.o y.o z.o -o x
  885.           rm -f x.o
  886.           rm -f y.o
  887.           rm -f z.o
  888.  
  889.      In more complicated cases, you must write an explicit command for
  890.      linking.
  891.  
  892. Yacc for C programs
  893.      `N.c' will be made automatically from `N.y' by running Yacc with the
  894.      command `$(YACC) $(YFLAGS)'.
  895.  
  896. Yacc for Ratfor programs
  897.      `N.r' will be made automatically from `N.yr' by running Yacc with the
  898.      command `$(YACCR) $(YFLAGS)'.
  899.  
  900. Yacc for EFL programs
  901.      `N.e' will be made automatically from `N.ye' by running Yacc with the
  902.      command `$(YACCE) $(YFLAGS)'.
  903.  
  904. Lex for C programs
  905.      `N.c' will be made automatically from `N.l' by by running Lex.  The
  906.      actual command is `$(LEX) $(LFLAGS)'.
  907.  
  908. Lex for Ratfor programs
  909.      `N.r' will be made automatically from `N.l' by by running Lex.  The
  910.      actual command is `$(LEX) $(LFLAGS)'.
  911.  
  912.      The traditional custom of using the same suffix `.l' for all Lex files
  913.      regardless of whether they produce C code or Ratfor code makes it
  914.      impossible for `make' to determine automatically which of the two
  915.      languages you are using in any particular case.  If `make' is called
  916.      upon to remake an object file from a `.l' file, it must guess which
  917.      compiler to use.  It will guess the C compiler, because that is more
  918.      common.  If you are using Ratfor, make sure `make' knows this by
  919.      mentioning `N.r' in the makefile.
  920.  
  921. RCS
  922.      Any file `N' will be extracted if necessary from an RCS file named
  923.      either `N,v' or `RCS/N,v'.  The precise command used is `$(CO)
  924.      $(COFLAGS)'.  The variable `CO' has default value `co'.
  925.  
  926. SCCS
  927.      Any file `N' will be extracted if necessary from an SCCS file named
  928.      either `s.N' or `SCCS/s.N'.  The precise command used is `$(GET)
  929.      $(GFLAGS)'.
  930.  
  931.      We recommend that you avoid the use of SCCS.  RCS is widely held to be
  932.      superior, and is also free.  By choosing free software in place of
  933.      comparable (or lesser) proprietary software, you support the free
  934.      software movement.
  935.  
  936. File: make,  Node: Implicit Variables,  Next: Chained Rules,  Prev: Catalogue of Rules,  Up: Implicit
  937.  
  938. Variables Used by Implicit Rules
  939. ================================
  940.  
  941. The commands in built-in implicit rules make liberal use of certain
  942. predefined variables.  You can redefine these variables, either in the
  943. makefile or with arguments to `make', to alter how the implicit rules work
  944. without actually redefining them.
  945.  
  946. For example, the command used to compile a C source file actually says
  947. `$(CC) -c $(CFLAGS)'.  The default values of the variables used are `cc'
  948. and nothing, resulting in the command `cc -c'.  By redefining `$(CC)' to
  949. `ncc', you could cause `ncc' to be used for all C compilations performed by
  950. the implicit rule.  By redefining `$(CFLAGS)' to be `-g', you could pass
  951. the `-g' option to each compilation.  *All* implicit rules that do C
  952. compilation use `$(CC)' to get the program name for the compiler and *all*
  953. include `$(CFLAGS)' among the arguments given to the compiler.
  954.  
  955. The variables used in implicit rules fall into two classes: those that are
  956. names of programs (like `CC') and those that contain arguments for the
  957. programs (like `CFLAGS').  (The ``name of a program'' may also contain some
  958. command arguments, but it must start with an actual executable program
  959. name.)  If a variable value contains more than one argument, separate them
  960. with spaces.
  961.  
  962. Here is a table of variables used as names of programs:
  963.  
  964. `AS'
  965.      Program for doing assembly; default `as'.
  966.  
  967. `CC'
  968.      Program for compiling C programs; default `cc'.
  969.  
  970. `CO'
  971.      Program for extracting a file from RCS; default `co'.
  972.  
  973. `FC'
  974.      Program for compiling or preprocessing Fortran, Ratfor, and EFL
  975.      programs; default `f77'.
  976.  
  977. `GET'
  978.      Program for extracting a file from SCCS; default `get'.
  979.  
  980. `LEX'
  981.      Program to use to turn Lex grammars into C programs or Ratfor
  982.      programs; default `lex'.
  983.  
  984. `PC'
  985.      Program for compiling Pascal programs; default `pc'.
  986.  
  987. `YACC'
  988.      Program to use to turn Yacc grammars into C programs; default `yacc'.
  989.  
  990. `YACCR'
  991.      Program to use to turn Yacc grammars into Ratfor programs; default
  992.      `yacc -r'.
  993.  
  994. `YACCE'
  995.      Program to use to turn Yacc grammars into EFL programs; default `yacc
  996.      -e'.
  997.  
  998. `RANLIB'
  999.      Program to use to update the symbol-directory of an archive (the
  1000.      `__.SYMDEF' member); default `ranlib'.
  1001.  
  1002. Here is a table of variables whose values are additional arguments for the
  1003. programs above.  The default values for all of these is the empty string.
  1004.  
  1005. `ASFLAGS'
  1006.      Extra flags to give to the assembler (when explicitly invoked on a
  1007.      `.s' file).
  1008.  
  1009. `CFLAGS'
  1010.      Extra flags to give to the C compiler.
  1011.  
  1012. `EFLAGS'
  1013.      Extra flags to give to the Fortran compiler for EFL programs.
  1014.  
  1015. `FFLAGS'
  1016.      Extra flags to give to the Fortran compiler.
  1017.  
  1018. `LFLAGS'
  1019.      Extra flags to give to Lex.
  1020.  
  1021. `LDFLAGS'
  1022.      Extra flags to give to compilers when they are supposed to invoke the
  1023.      linker, `ld' (actually the value of the variable `LD').
  1024.  
  1025. `PFLAGS'
  1026.      Extra flags to give to the Pascal compiler.
  1027.  
  1028. `RFLAGS'
  1029.      Extra flags to give to the Fortran compiler for Ratfor programs.
  1030.  
  1031. `YFLAGS'
  1032.      Extra flags to give to Yacc.
  1033.  
  1034. File: make,  Node: Chained Rules,  Next: Pattern Rules,  Prev: Implicit Variables,  Up: Implicit
  1035.  
  1036. Chains of Implicit Rules
  1037. ========================
  1038.  
  1039. Sometimes a file can be made by a sequence of implicit rules.  For example,
  1040. a file `N.o' could be made from `N.y' by running first Yacc and then `cc'. 
  1041. Such a sequence is called a "chain".
  1042.  
  1043. If the file `N.c' exists, or is mentioned in the makefile, no special
  1044. searching is required: `make' finds that the object file can be made by C
  1045. compilation from `N.c'; later on, when considering how to make `N.c', the
  1046. rule for running Yacc will be used.  Ultimately both `N.c' and `N.o' are
  1047. updated.
  1048.  
  1049. However, even if `N.c' does not exist and is not mentioned, `make' knows
  1050. how to envision it as the missing link between `N.o' and `N.y'!  In this
  1051. case, `N.c' is called an "intermediate file".  Once `make' has decided to
  1052. use the intermediate file, it is entered in the data base as if it had been
  1053. mentioned in the makefile, along with the implicit rule that says how to
  1054. create it.
  1055.  
  1056. Intermediate files are remade using their rules just like all other files. 
  1057. The difference is that the intermediate file is deleted when `make' is
  1058. finished.  Therefore, the intermediate file which did not exist before
  1059. `make' also does not exist after `make'.  The deletion is reported to you
  1060. by printing a `rm -f' command that shows what `make' is doing.  (You can
  1061. optionally define an implicit rule so as to preserve certain intermediate
  1062. files.  You can also list the target pattern of an implicit rule (such as
  1063. `%.o') as a dependency file of the special target `.PRECIOUS' to preserve
  1064. intermediate files whose target patterns match that file's name.)
  1065.  
  1066. A chain can involve more than two implicit rules.  For example, it is
  1067. possible to make a file `foo' from `RCS/foo.y,v' by running RCS, Yacc and
  1068. `cc'.  Then both `foo.y' and `foo.c' are intermediate files that are
  1069. deleted at the end.
  1070.  
  1071. No single implicit rule can appear more than once in a chain.  This means
  1072. that `make' will not even consider such a ridiculous thing as making `foo'
  1073. from `foo.o.o' by running the linker twice.  This constraint has the added
  1074. benefit of preventing any infinite loop in the search for an implicit rule
  1075. chain.
  1076.  
  1077. There are some special implicit rules to optimize certain cases that would
  1078. otherwise by handled by rule chains.  For example, making `foo' from
  1079. `foo.c' could be handled by compiling and linking with separate rules,
  1080. using `foo.o' as an intermediate file.  But what actually happens is that a
  1081. special rule for this case does the compilation and linking with a single
  1082. `cc' command.  The optimized rule is used in preference to the step-by-step
  1083. chain because it comes earlier in the ordering of rules.
  1084.  
  1085. File: make,  Node: Pattern Rules,  Next: Last Resort,  Prev: Chained Rules,  Up: Implicit
  1086.  
  1087. Defining and Redefining Pattern Rules
  1088. =====================================
  1089.  
  1090. You define an implicit rule by writing a "pattern rule".  A pattern rule
  1091. looks like an ordinary rule, except that its target contains the character
  1092. `%' (exactly one of them).  The target is considered a pattern for matching
  1093. file names; the `%' can match any substring, while other characters match
  1094. only themselves.
  1095.  
  1096. For example, `%.c' as a pattern matches any file name that ends in `.c'. 
  1097. `s.%.c' as a pattern matches any file name that starts with `s.', ends in
  1098. `.c' and is at least five characters long.  (There must be at least one
  1099. character to match the `%'.)  The substring that the `%' matches is called
  1100. the "stem".
  1101.  
  1102. A pattern rule must have at least one dependency that uses `%'.  `%' in a
  1103. dependency of a pattern rule stands for the same stem that was matched by
  1104. the `%' in the target.  In order for the pattern rule to apply, its target
  1105. pattern must match the file name under consideration, and its dependency
  1106. patterns must name files that exist or can be made.  These files become
  1107. dependencies of the target.
  1108.  
  1109. There may also be dependencies that do not use `%'; such a dependency
  1110. attaches to every file made by this pattern rule.  These unvarying
  1111. dependencies are rarely useful.
  1112.  
  1113. The order in which pattern rules appear in the makefile is important
  1114. because the rules are considered in that order.  Of equally applicable
  1115. rules, the first one found is used.  The rules you write take precedence
  1116. over those that are built in.  Note, however, that a rule whose
  1117. dependencies actually exist or are mentioned always takes priority over a
  1118. rule with dependencies that must be made by chaining other implicit rules.
  1119.  
  1120. * Menu:
  1121.  
  1122. * Examples: Pattern Examples.  Real examples of pattern rule definitions.
  1123.  
  1124. * Vars: Automatic.             The automatic variables enable the commands
  1125.                                 in pattern rules to act on the right files.
  1126.  
  1127. * Matching: Pattern Match.     Details of how patterns match.
  1128.  
  1129. * Match-Anything Rules::       Precautions in defining a rules that can
  1130.                                 match any target file whatever.
  1131.  
  1132. * Canceling Rules::           Overriding or canceling built-in rules.
  1133.  
  1134. * Last Resort::                How to define a last-resort rule
  1135.                                 that applies to any target that no other
  1136.                                 rule applies to.
  1137.  
  1138. * Suffix Rules::               The old-fashioned way to define implicit rules.
  1139.  
  1140.  
  1141. File: make,  Node: Pattern Examples,  Next: Automatic,  Prev: Pattern Rules,  Up: Pattern Rules
  1142.  
  1143. Pattern Rule Examples
  1144. ---------------------
  1145.  
  1146. Here are some examples of pattern rules actually predefined in `make'. 
  1147. First, the rule that compiles `.c' files into `.o' files:
  1148.  
  1149.      %.o : %.c
  1150.              $(CC) -c $(CFLAGS) $< -o $@
  1151.  
  1152. defines a rule that can make any file `X.o' from `X.c'.  The command uses
  1153. the automatic variables `$@' and `$<' to substitute the names of the target
  1154. file and the source file as they are in each case where the rule apply
  1155. (*Note Automatic::.).
  1156.  
  1157. Here is a second built-in rule:
  1158.  
  1159.      % :: RCS/%,v
  1160.              $(CO) $(COFLAGS) $<
  1161.  
  1162. defines a rule that can make any file `X' whatever from a corresponding
  1163. file `X,v' in the subdirectory `RCS'.  Since the target is `%', this rule
  1164. will apply to any file whatever, provided the appropriate dependency file
  1165. exists.  The double colon makes the rule "terminal", which means that its
  1166. dependency may not be an intermediate file (*Note Match-Anything Rules::.).
  1167.  
  1168.